package subject.tengxun.middle.easy;

import java.util.ArrayList;
import java.util.List;

/**
 * 功能：给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
 * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
 * 作者：yedou
 * 日期：2024/8/617:42
 */
public class generate {
    public static void main(String[] args) {
        int numRows = 2;
        // 初始化dp
        List<List<Integer>> dp = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            // 首先初始为全1第i行
            List<Integer> list2 = new ArrayList<>();
            int count = 0;
            while (count < i + 1) {
                list2.add(1);
                count = count + 1;
            }
            dp.add(i, list2);
            if (i == 0 || i == 1) {
                continue;
            }
            for (int j = 0; j < i + 1; j++) {
                // 拿出行
                List<Integer> rowList = (List<Integer>) dp.get(i);
                List<Integer> rowList1 = (List<Integer>) dp.get(i - 1);
                // 如果实在第一个或者最后一个
                if (j == 0 || j == i) {
                    rowList.set(j, 1);
                    dp.set(i, rowList);
                } else {
                    // 计算j位置的值
                    int value = rowList1.get(j - 1) + rowList1.get(j);
                    rowList.set(j, value);
                    dp.set(i, rowList);
                }

            }
        }
        System.out.println(dp);
        System.out.println(method2(numRows));
    }

    public static List<List<Integer>> method2(int numRows) {
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        for (int i = 0; i < numRows; ++i) {
            List<Integer> row = new ArrayList<Integer>();
            for (int j = 0; j <= i; ++j) {
                if (j == 0 || j == i) {
                    row.add(1);
                } else {
                    row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
                }
            }
            ret.add(row);
        }
        return ret;
    }
}